(ns notebooks.main-talk
  (:require [tablecloth.api :as tc]
            [tablecloth.api.columns :as tcc]
            [scicloj.noj.v1.vis.hanami :as hanami]
            [aerial.hanami.templates :as ht]
            [tech.v3.datatype.datetime :as datetime]
            [tech.v3.datatype.rolling :as rolling]
            [tech.v3.datatype.functional :as fun]
            [data.generate-dataset]))

London Clojurians Talk December 2023

Clean up dataset

(def clojure-repos
  (-> "data/1000-repos.edn"
      tc/dataset))
(def commit-dates
  (-> "data/commit-dates-2023-12-05T19:48:16.843-00:00.csv.gz"
      (tc/dataset {:key-fn keyword})))

Explore the dataset with tablecloth Get column names

(-> clojure-repos
    tc/column-names
    sort)
(:allow_forking
 :archive_url
 :archived
 :assignees_url
 :blobs_url
 :branches_url
 :clone_url
 :collaborators_url
 :comments_url
 :commits_url
 :compare_url
 :contents_url
 :contributors_url
 :created_at
 :default_branch
 :deployments_url
 :description
 :disabled
 :downloads_url
 :events_url
 :fork
 :forks
 :forks_count
 :forks_url
 :full_name
 :git_commits_url
 :git_refs_url
 :git_tags_url
 :git_url
 :has_discussions
 :has_downloads
 :has_issues
 :has_pages
 :has_projects
 :has_wiki
 :homepage
 :hooks_url
 :html_url
 :id
 :is_template
 :issue_comment_url
 :issue_events_url
 :issues_url
 :keys_url
 :labels_url
 :language
 :languages_url
 :license
 :merges_url
 :milestones_url
 :mirror_url
 :name
 :node_id
 :notifications_url
 :open_issues
 :open_issues_count
 :owner
 :permissions
 :private
 :pulls_url
 :pushed_at
 :releases_url
 :score
 :size
 :ssh_url
 :stargazers_count
 :stargazers_url
 :statuses_url
 :subscribers_url
 :subscription_url
 :svn_url
 :tags_url
 :teams_url
 :topics
 :trees_url
 :updated_at
 :url
 :visibility
 :watchers
 :watchers_count
 :web_commit_signoff_required)

Narrow it down to ones we care about

(tc/select-columns clojure-repos [:full_name :owner :watchers_count :created_at])

data/1000-repos.edn [1000 4]:

:full_name :owner :watchers_count :created_at
tonsky/FiraCode {:html_url https://github.com/tonsky, 73534 2014-11-11T19:32:38Z
:gravatar_id ,
:followers_url https://api.github.com/users/tonsky/followers,
:subscriptions_url https://api.github.com/users/tonsky/subscriptions,
:site_admin false,
:following_url
https://api.github.com/users/tonsky/following{/other_user},
:node_id MDQ6VXNlcjI4NTI5Mg==,
:type User,
:received_events_url
https://api.github.com/users/tonsky/received_events,
:login tonsky,
:organizations_url https://api.github.com/users/tonsky/orgs,
:id 285292,
:events_url https://api.github.com/users/tonsky/events{/privacy},
:url https://api.github.com/users/tonsky,
:repos_url https://api.github.com/users/tonsky/repos,
:starred_url
https://api.github.com/users/tonsky/starred{/owner}{/repo},
:gists_url https://api.github.com/users/tonsky/gists{/gist_id},
:avatar_url https://avatars.githubusercontent.com/u/285292?v=4}
metabase/metabase {:html_url https://github.com/metabase, 35041 2015-02-02T19:25:47Z
:gravatar_id ,
:followers_url https://api.github.com/users/metabase/followers,
:subscriptions_url
https://api.github.com/users/metabase/subscriptions,
:site_admin false,
:following_url
https://api.github.com/users/metabase/following{/other_user},
:node_id MDEyOk9yZ2FuaXphdGlvbjEwNTIwNjI5,
:type Organization,
:received_events_url
https://api.github.com/users/metabase/received_events,
:login metabase,
:organizations_url https://api.github.com/users/metabase/orgs,
:id 10520629,
:events_url https://api.github.com/users/metabase/events{/privacy},
:url https://api.github.com/users/metabase,
:repos_url https://api.github.com/users/metabase/repos,
:starred_url
https://api.github.com/users/metabase/starred{/owner}{/repo},
:gists_url https://api.github.com/users/metabase/gists{/gist_id},
:avatar_url https://avatars.githubusercontent.com/u/10520629?v=4}
logseq/logseq {:html_url https://github.com/logseq, 26832 2020-05-23T00:06:06Z
:gravatar_id ,
:followers_url https://api.github.com/users/logseq/followers,
:subscriptions_url https://api.github.com/users/logseq/subscriptions,
:site_admin false,
:following_url
https://api.github.com/users/logseq/following{/other_user},
:node_id MDEyOk9yZ2FuaXphdGlvbjYzMzg1Mjg5,
:type Organization,
:received_events_url
https://api.github.com/users/logseq/received_events,
:login logseq,
:organizations_url https://api.github.com/users/logseq/orgs,
:id 63385289,
:events_url https://api.github.com/users/logseq/events{/privacy},
:url https://api.github.com/users/logseq,
:repos_url https://api.github.com/users/logseq/repos,
:starred_url
https://api.github.com/users/logseq/starred{/owner}{/repo},
:gists_url https://api.github.com/users/logseq/gists{/gist_id},
:avatar_url https://avatars.githubusercontent.com/u/63385289?v=4}
penpot/penpot {:html_url https://github.com/penpot, 24396 2015-12-29T22:09:07Z
:gravatar_id ,
:followers_url https://api.github.com/users/penpot/followers,
:subscriptions_url https://api.github.com/users/penpot/subscriptions,
:site_admin false,
:following_url
https://api.github.com/users/penpot/following{/other_user},
:node_id MDEyOk9yZ2FuaXphdGlvbjMwMTc5NjQ0,
:type Organization,
:received_events_url
https://api.github.com/users/penpot/received_events,
:login penpot,
:organizations_url https://api.github.com/users/penpot/orgs,
:id 30179644,
:events_url https://api.github.com/users/penpot/events{/privacy},
:url https://api.github.com/users/penpot,
:repos_url https://api.github.com/users/penpot/repos,
:starred_url
https://api.github.com/users/penpot/starred{/owner}{/repo},
:gists_url https://api.github.com/users/penpot/gists{/gist_id},
:avatar_url https://avatars.githubusercontent.com/u/30179644?v=4}
LightTable/LightTable {:html_url https://github.com/LightTable, 11732 2012-06-27T22:32:43Z
:gravatar_id ,
:followers_url https://api.github.com/users/LightTable/followers,
:subscriptions_url
https://api.github.com/users/LightTable/subscriptions,
:site_admin false,
:following_url
https://api.github.com/users/LightTable/following{/other_user},
:node_id MDEyOk9yZ2FuaXphdGlvbjU4NzcwMTA=,
:type Organization,
:received_events_url
https://api.github.com/users/LightTable/received_events,
:login LightTable,
:organizations_url https://api.github.com/users/LightTable/orgs,
:id 5877010,
:events_url https://api.github.com/users/LightTable/events{/privacy},
:url https://api.github.com/users/LightTable,
:repos_url https://api.github.com/users/LightTable/repos,
:starred_url
https://api.github.com/users/LightTable/starred{/owner}{/repo},
:gists_url https://api.github.com/users/LightTable/gists{/gist_id},
:avatar_url https://avatars.githubusercontent.com/u/5877010?v=4}
clojure/clojurescript {:html_url https://github.com/clojure, 9145 2011-07-20T23:29:13Z
:gravatar_id ,
:followers_url https://api.github.com/users/clojure/followers,
:subscriptions_url https://api.github.com/users/clojure/subscriptions,
:site_admin false,
:following_url
https://api.github.com/users/clojure/following{/other_user},
:node_id MDEyOk9yZ2FuaXphdGlvbjMxNzg3NQ==,
:type Organization,
:received_events_url
https://api.github.com/users/clojure/received_events,
:login clojure,
:organizations_url https://api.github.com/users/clojure/orgs,
:id 317875,
:events_url https://api.github.com/users/clojure/events{/privacy},
:url https://api.github.com/users/clojure,
:repos_url https://api.github.com/users/clojure/repos,
:starred_url
https://api.github.com/users/clojure/starred{/owner}{/repo},
:gists_url https://api.github.com/users/clojure/gists{/gist_id},
:avatar_url https://avatars.githubusercontent.com/u/317875?v=4}
technomancy/leiningen {:html_url https://github.com/technomancy, 7304 2009-11-01T05:50:07Z
:gravatar_id ,
:followers_url https://api.github.com/users/technomancy/followers,
:subscriptions_url
https://api.github.com/users/technomancy/subscriptions,
:site_admin false,
:following_url
https://api.github.com/users/technomancy/following{/other_user},
:node_id MDQ6VXNlcjE0MQ==,
:type User,
:received_events_url
https://api.github.com/users/technomancy/received_events,
:login technomancy,
:organizations_url https://api.github.com/users/technomancy/orgs,
:id 141,
:events_url https://api.github.com/users/technomancy/events{/privacy},
:url https://api.github.com/users/technomancy,
:repos_url https://api.github.com/users/technomancy/repos,
:starred_url
https://api.github.com/users/technomancy/starred{/owner}{/repo},
:gists_url https://api.github.com/users/technomancy/gists{/gist_id},
:avatar_url https://avatars.githubusercontent.com/u/141?v=4}
omcljs/om {:html_url https://github.com/omcljs, 6661 2013-12-11T18:18:11Z
:gravatar_id ,
:followers_url https://api.github.com/users/omcljs/followers,
:subscriptions_url https://api.github.com/users/omcljs/subscriptions,
:site_admin false,
:following_url
https://api.github.com/users/omcljs/following{/other_user},
:node_id MDEyOk9yZ2FuaXphdGlvbjEwODIyMTE1,
:type Organization,
:received_events_url
https://api.github.com/users/omcljs/received_events,
:login omcljs,
:organizations_url https://api.github.com/users/omcljs/orgs,
:id 10822115,
:events_url https://api.github.com/users/omcljs/events{/privacy},
:url https://api.github.com/users/omcljs,
:repos_url https://api.github.com/users/omcljs/repos,
:starred_url
https://api.github.com/users/omcljs/starred{/owner}{/repo},
:gists_url https://api.github.com/users/omcljs/gists{/gist_id},
:avatar_url https://avatars.githubusercontent.com/u/10822115?v=4}
jepsen-io/jepsen {:html_url https://github.com/jepsen-io, 6386 2013-04-14T19:20:27Z
:gravatar_id ,
:followers_url https://api.github.com/users/jepsen-io/followers,
:subscriptions_url
https://api.github.com/users/jepsen-io/subscriptions,
:site_admin false,
:following_url
https://api.github.com/users/jepsen-io/following{/other_user},
:node_id MDEyOk9yZ2FuaXphdGlvbjE5MzM0NDAz,
:type Organization,
:received_events_url
https://api.github.com/users/jepsen-io/received_events,
:login jepsen-io,
:organizations_url https://api.github.com/users/jepsen-io/orgs,
:id 19334403,
:events_url https://api.github.com/users/jepsen-io/events{/privacy},
:url https://api.github.com/users/jepsen-io,
:repos_url https://api.github.com/users/jepsen-io/repos,
:starred_url
https://api.github.com/users/jepsen-io/starred{/owner}{/repo},
:gists_url https://api.github.com/users/jepsen-io/gists{/gist_id},
:avatar_url https://avatars.githubusercontent.com/u/19334403?v=4}
athensresearch/athens {:html_url https://github.com/athensresearch, 6331 2020-03-31T01:29:41Z
:gravatar_id ,
:followers_url https://api.github.com/users/athensresearch/followers,
:subscriptions_url
https://api.github.com/users/athensresearch/subscriptions,
:site_admin false,
:following_url
https://api.github.com/users/athensresearch/following{/other_user},
:node_id MDEyOk9yZ2FuaXphdGlvbjY0MzcxMTcy,
:type Organization,
:received_events_url
https://api.github.com/users/athensresearch/received_events,
:login athensresearch,
:organizations_url https://api.github.com/users/athensresearch/orgs,
:id 64371172,
:events_url
https://api.github.com/users/athensresearch/events{/privacy},
:url https://api.github.com/users/athensresearch,
:repos_url https://api.github.com/users/athensresearch/repos,
:starred_url
https://api.github.com/users/athensresearch/starred{/owner}{/repo},
:gists_url
https://api.github.com/users/athensresearch/gists{/gist_id},
:avatar_url https://avatars.githubusercontent.com/u/64371172?v=4}
turbopape/scheje {:html_url https://github.com/turbopape, 140 2015-12-11T16:27:29Z
:gravatar_id ,
:followers_url https://api.github.com/users/turbopape/followers,
:subscriptions_url
https://api.github.com/users/turbopape/subscriptions,
:site_admin false,
:following_url
https://api.github.com/users/turbopape/following{/other_user},
:node_id MDQ6VXNlcjI3NzkxNjc=,
:type User,
:received_events_url
https://api.github.com/users/turbopape/received_events,
:login turbopape,
:organizations_url https://api.github.com/users/turbopape/orgs,
:id 2779167,
:events_url https://api.github.com/users/turbopape/events{/privacy},
:url https://api.github.com/users/turbopape,
:repos_url https://api.github.com/users/turbopape/repos,
:starred_url
https://api.github.com/users/turbopape/starred{/owner}{/repo},
:gists_url https://api.github.com/users/turbopape/gists{/gist_id},
:avatar_url https://avatars.githubusercontent.com/u/2779167?v=4}
AbhinavOmprakash/luna {:html_url https://github.com/AbhinavOmprakash, 140 2021-10-16T11:52:25Z
:gravatar_id ,
:followers_url
https://api.github.com/users/AbhinavOmprakash/followers,
:subscriptions_url
https://api.github.com/users/AbhinavOmprakash/subscriptions,
:site_admin false,
:following_url
https://api.github.com/users/AbhinavOmprakash/following{/other_user},
:node_id MDQ6VXNlcjU1ODgwMjYw,
:type User,
:received_events_url
https://api.github.com/users/AbhinavOmprakash/received_events,
:login AbhinavOmprakash,
:organizations_url https://api.github.com/users/AbhinavOmprakash/orgs,
:id 55880260,
:events_url
https://api.github.com/users/AbhinavOmprakash/events{/privacy},
:url https://api.github.com/users/AbhinavOmprakash,
:repos_url https://api.github.com/users/AbhinavOmprakash/repos,
:starred_url
https://api.github.com/users/AbhinavOmprakash/starred{/owner}{/repo},
:gists_url
https://api.github.com/users/AbhinavOmprakash/gists{/gist_id},
:avatar_url https://avatars.githubusercontent.com/u/55880260?v=4}
mischov/reaver {:html_url https://github.com/mischov, 139 2014-12-09T19:23:30Z
:gravatar_id ,
:followers_url https://api.github.com/users/mischov/followers,
:subscriptions_url https://api.github.com/users/mischov/subscriptions,
:site_admin false,
:following_url
https://api.github.com/users/mischov/following{/other_user},
:node_id MDQ6VXNlcjE2MzQ2MzI=,
:type User,
:received_events_url
https://api.github.com/users/mischov/received_events,
:login mischov,
:organizations_url https://api.github.com/users/mischov/orgs,
:id 1634632,
:events_url https://api.github.com/users/mischov/events{/privacy},
:url https://api.github.com/users/mischov,
:repos_url https://api.github.com/users/mischov/repos,
:starred_url
https://api.github.com/users/mischov/starred{/owner}{/repo},
:gists_url https://api.github.com/users/mischov/gists{/gist_id},
:avatar_url https://avatars.githubusercontent.com/u/1634632?v=4}
markus-wa/cq {:html_url https://github.com/markus-wa, 139 2021-03-19T17:28:04Z
:gravatar_id ,
:followers_url https://api.github.com/users/markus-wa/followers,
:subscriptions_url
https://api.github.com/users/markus-wa/subscriptions,
:site_admin false,
:following_url
https://api.github.com/users/markus-wa/following{/other_user},
:node_id MDQ6VXNlcjUxMzgzMTY=,
:type User,
:received_events_url
https://api.github.com/users/markus-wa/received_events,
:login markus-wa,
:organizations_url https://api.github.com/users/markus-wa/orgs,
:id 5138316,
:events_url https://api.github.com/users/markus-wa/events{/privacy},
:url https://api.github.com/users/markus-wa,
:repos_url https://api.github.com/users/markus-wa/repos,
:starred_url
https://api.github.com/users/markus-wa/starred{/owner}{/repo},
:gists_url https://api.github.com/users/markus-wa/gists{/gist_id},
:avatar_url https://avatars.githubusercontent.com/u/5138316?v=4}
tonsky/grumpy {:html_url https://github.com/tonsky, 139 2017-08-30T19:03:33Z
:gravatar_id ,
:followers_url https://api.github.com/users/tonsky/followers,
:subscriptions_url https://api.github.com/users/tonsky/subscriptions,
:site_admin false,
:following_url
https://api.github.com/users/tonsky/following{/other_user},
:node_id MDQ6VXNlcjI4NTI5Mg==,
:type User,
:received_events_url
https://api.github.com/users/tonsky/received_events,
:login tonsky,
:organizations_url https://api.github.com/users/tonsky/orgs,
:id 285292,
:events_url https://api.github.com/users/tonsky/events{/privacy},
:url https://api.github.com/users/tonsky,
:repos_url https://api.github.com/users/tonsky/repos,
:starred_url
https://api.github.com/users/tonsky/starred{/owner}{/repo},
:gists_url https://api.github.com/users/tonsky/gists{/gist_id},
:avatar_url https://avatars.githubusercontent.com/u/285292?v=4}
logseq/publish-spa {:html_url https://github.com/logseq, 139 2023-04-12T19:38:52Z
:gravatar_id ,
:followers_url https://api.github.com/users/logseq/followers,
:subscriptions_url https://api.github.com/users/logseq/subscriptions,
:site_admin false,
:following_url
https://api.github.com/users/logseq/following{/other_user},
:node_id MDEyOk9yZ2FuaXphdGlvbjYzMzg1Mjg5,
:type Organization,
:received_events_url
https://api.github.com/users/logseq/received_events,
:login logseq,
:organizations_url https://api.github.com/users/logseq/orgs,
:id 63385289,
:events_url https://api.github.com/users/logseq/events{/privacy},
:url https://api.github.com/users/logseq,
:repos_url https://api.github.com/users/logseq/repos,
:starred_url
https://api.github.com/users/logseq/starred{/owner}{/repo},
:gists_url https://api.github.com/users/logseq/gists{/gist_id},
:avatar_url https://avatars.githubusercontent.com/u/63385289?v=4}
jasonjckn/llvm-clojure-bindings {:html_url https://github.com/jasonjckn, 139 2011-06-14T07:45:20Z
:gravatar_id ,
:followers_url https://api.github.com/users/jasonjckn/followers,
:subscriptions_url
https://api.github.com/users/jasonjckn/subscriptions,
:site_admin false,
:following_url
https://api.github.com/users/jasonjckn/following{/other_user},
:node_id MDQ6VXNlcjU1MDgzOQ==,
:type User,
:received_events_url
https://api.github.com/users/jasonjckn/received_events,
:login jasonjckn,
:organizations_url https://api.github.com/users/jasonjckn/orgs,
:id 550839,
:events_url https://api.github.com/users/jasonjckn/events{/privacy},
:url https://api.github.com/users/jasonjckn,
:repos_url https://api.github.com/users/jasonjckn/repos,
:starred_url
https://api.github.com/users/jasonjckn/starred{/owner}{/repo},
:gists_url https://api.github.com/users/jasonjckn/gists{/gist_id},
:avatar_url https://avatars.githubusercontent.com/u/550839?v=4}
weavejester/brutha {:html_url https://github.com/weavejester, 139 2015-04-25T20:38:59Z
:gravatar_id ,
:followers_url https://api.github.com/users/weavejester/followers,
:subscriptions_url
https://api.github.com/users/weavejester/subscriptions,
:site_admin false,
:following_url
https://api.github.com/users/weavejester/following{/other_user},
:node_id MDQ6VXNlcjg3ODA=,
:type User,
:received_events_url
https://api.github.com/users/weavejester/received_events,
:login weavejester,
:organizations_url https://api.github.com/users/weavejester/orgs,
:id 8780,
:events_url https://api.github.com/users/weavejester/events{/privacy},
:url https://api.github.com/users/weavejester,
:repos_url https://api.github.com/users/weavejester/repos,
:starred_url
https://api.github.com/users/weavejester/starred{/owner}{/repo},
:gists_url https://api.github.com/users/weavejester/gists{/gist_id},
:avatar_url https://avatars.githubusercontent.com/u/8780?v=4}
juliangamble/clojure-ants-simulation {:html_url https://github.com/juliangamble, 138 2011-12-28T11:33:41Z
:gravatar_id ,
:followers_url https://api.github.com/users/juliangamble/followers,
:subscriptions_url
https://api.github.com/users/juliangamble/subscriptions,
:site_admin false,
:following_url
https://api.github.com/users/juliangamble/following{/other_user},
:node_id MDQ6VXNlcjI2MTYxNg==,
:type User,
:received_events_url
https://api.github.com/users/juliangamble/received_events,
:login juliangamble,
:organizations_url https://api.github.com/users/juliangamble/orgs,
:id 261616,
:events_url
https://api.github.com/users/juliangamble/events{/privacy},
:url https://api.github.com/users/juliangamble,
:repos_url https://api.github.com/users/juliangamble/repos,
:starred_url
https://api.github.com/users/juliangamble/starred{/owner}{/repo},
:gists_url https://api.github.com/users/juliangamble/gists{/gist_id},
:avatar_url https://avatars.githubusercontent.com/u/261616?v=4}
oliyh/re-learn {:html_url https://github.com/oliyh, 138 2016-09-26T07:37:55Z
:gravatar_id ,
:followers_url https://api.github.com/users/oliyh/followers,
:subscriptions_url https://api.github.com/users/oliyh/subscriptions,
:site_admin false,
:following_url
https://api.github.com/users/oliyh/following{/other_user},
:node_id MDQ6VXNlcjIwNTI4MzU=,
:type User,
:received_events_url
https://api.github.com/users/oliyh/received_events,
:login oliyh,
:organizations_url https://api.github.com/users/oliyh/orgs,
:id 2052835,
:events_url https://api.github.com/users/oliyh/events{/privacy},
:url https://api.github.com/users/oliyh,
:repos_url https://api.github.com/users/oliyh/repos,
:starred_url
https://api.github.com/users/oliyh/starred{/owner}{/repo},
:gists_url https://api.github.com/users/oliyh/gists{/gist_id},
:avatar_url https://avatars.githubusercontent.com/u/2052835?v=4}
nakkaya/clodiuno {:html_url https://github.com/nakkaya, 138 2010-01-02T04:59:08Z
:gravatar_id ,
:followers_url https://api.github.com/users/nakkaya/followers,
:subscriptions_url https://api.github.com/users/nakkaya/subscriptions,
:site_admin false,
:following_url
https://api.github.com/users/nakkaya/following{/other_user},
:node_id MDQ6VXNlcjg4NDk5,
:type User,
:received_events_url
https://api.github.com/users/nakkaya/received_events,
:login nakkaya,
:organizations_url https://api.github.com/users/nakkaya/orgs,
:id 88499,
:events_url https://api.github.com/users/nakkaya/events{/privacy},
:url https://api.github.com/users/nakkaya,
:repos_url https://api.github.com/users/nakkaya/repos,
:starred_url
https://api.github.com/users/nakkaya/starred{/owner}{/repo},
:gists_url https://api.github.com/users/nakkaya/gists{/gist_id},
:avatar_url https://avatars.githubusercontent.com/u/88499?v=4}

Owners are their whole own things.. too much information inspect one

(-> clojure-repos (tc/select-rows 0) :owner)
#tech.v3.dataset.column<persistent-map>[1]
:owner
[{:html_url "https://github.com/tonsky", :gravatar_id "", :followers_url "https://api.github.com/users/tonsky/followers", :subscriptions_url "https://api.github.com/users/tonsky/subscriptions", :site_admin false, :following_url "https://api.github.com/users/tonsky/following{/other_user}", :node_id "MDQ6VXNlcjI4NTI5Mg==", :type "User", :received_events_url "https://api.github.com/users/tonsky/received_events", :login "tonsky", :organizations_url "https://api.github.com/users/tonsky/orgs", :id 285292, :events_url "https://api.github.com/users/tonsky/events{/privacy}", :url "https://api.github.com/users/tonsky", :repos_url "https://api.github.com/users/tonsky/repos", :starred_url "https://api.github.com/users/tonsky/starred{/owner}{/repo}", :gists_url "https://api.github.com/users/tonsky/gists{/gist_id}", :avatar_url "https://avatars.githubusercontent.com/u/285292?v=4"}]
(-> clojure-repos (tc/select-rows 0) :owner first :login)
"tonsky"
(def smaller-clojure-repos
  (-> clojure-repos
      (tc/map-columns :owner_handle [:owner] :login)
      (tc/select-columns [:html_url
                          :full_name
                          :owner_handle
                          :watchers_count
                          :created_at])
      ))
(hanami/plot clojure-repos
             ht/point-chart
             {:X :created_at
              :XTYPE "temporal"
              :Y :watchers_count})

Group repos by owner

(-> smaller-clojure-repos
    (tc/group-by [:owner_handle])
    (tc/aggregate {:repos_count tc/row-count})
    (tc/order-by :repos_count [:desc]))

_unnamed [579 2]:

:owner_handle :repos_count
clojure 30
clj-commons 26
weavejester 22
oakes 13
metosin 12
taoensso 11
juxt 10
babashka 9
swannodette 9
tonsky 8
ingesolvoll 1
jsa-aerial 1
hashobject 1
alexander-yakushev 1
jonromero 1
l3nz 1
MastodonC 1
gcv 1
kiranshila 1
gnarroway 1
yetibot 1
(-> clojure-repos
    (tc/map-columns :owner_handle [:owner] :login)
    (tc/group-by [:owner_handle])
    (tc/aggregate {:total_watchers (fn [ds]
                                     (reduce + (:watchers_count ds)))}))

_unnamed [579 2]:

:owner_handle :total_watchers
tonsky 80407
metabase 35614
logseq 26971
penpot 24396
LightTable 11939
clojure 24382
technomancy 8263
omcljs 7069
jepsen-io 8799
athensresearch 6331
ftomassetti 141
digital-dj-tools 141
prestancedesign 140
tbatchelli 140
jclaggett 140
martintrojer 140
AbhinavOmprakash 140
mischov 139
markus-wa 139
jasonjckn 139
juliangamble 138
(-> commit-dates tc/column-names)
(:date :language :url)
(-> commit-dates
    (tc/select-rows )
    (tc/group-by [:date])
    )

_unnamed [0 0]

(def date-counts
  (-> commit-dates
      (tc/select-rows (->> commit-dates
                           :date
                           ((partial datetime/long-temporal-field :years))
                           (map #(>= % 2011))))
      (tc/group-by [:date :language])
      (tc/aggregate {:n tc/row-count})
      (tc/order-by [:date :language])))
  • Extract relevant data from massive JSON blob
  • Clean up data, explain/interpret columns

Basic Analysis

  • Discover trends
  • Projections

Visualization

  • Plot/graph the above

To talk about

Daniel – introduce workflows, explain where things are at

Kira – examples in the context of the cookbook?

Timothy – talk about some tooling developments, goals of clay/claykind/etc

source: projects/london-clojurians-dec-2023-talk/src/notebooks/main_talk.clj